def validate_id(user_id):
    # ID长度不能超过8位，且只能由数字、字母、下划线组成
    if len(user_id) > 8:
        return False, "ID长度不能超过8位"
    for char in user_id:
        if not (char.isalnum() or char == '_'):
            return False, "ID只能由数字、字母、下划线组成"
    return True, ""


def validate_email(email):
    # EMAIL地址要求符合基本电子邮件格式
    if '@' not in email or '.' not in email:
        return False, "EMAIL地址格式不正确"
    at_index = email.find('@')
    dot_index = email.find('.')
    if at_index > dot_index or dot_index == len(email) - 1:
        return False, "EMAIL地址格式不正确"
    return True, ""


def validate_id_number(id_number):
    # 身份证号要求符合基本格式（18位数字）
    if len(id_number) != 18 or not id_number.isdigit():
        return False, "身份证号必须是18位数字"
    return True, ""


def validate_name(name):
    # 姓名只能中文且不能超过4位
    if len(name) > 4:
        return False, "姓名不能超过4位"
    for char in name:
        if not '\u4e00' <= char <= '\u9fff':  # 检查是否为中文字符
            return False, "姓名只能包含中文"
    return True, ""


def get_user_input():
    user_info = {}

    # 获取并验证ID
    while True:
        user_id = input("请输入ID: ")
        is_valid, error_msg = validate_id(user_id)
        if is_valid:
            user_info['ID'] = user_id
            break
        else:
            print(error_msg)

    # 获取并验证EMAIL地址
    while True:
        email = input("请输入EMAIL地址: ")
        is_valid, error_msg = validate_email(email)
        if is_valid:
            user_info['EMAIL地址'] = email
            break
        else:
            print(error_msg)

    # 获取并验证身份证号
    while True:
        id_number = input("请输入身份证号: ")
        is_valid, error_msg = validate_id_number(id_number)
        if is_valid:
            user_info['身份证号'] = id_number
            break
        else:
            print(error_msg)

    # 获取并验证姓名
    while True:
        name = input("请输入姓名: ")
        is_valid, error_msg = validate_name(name)
        if is_valid:
            user_info['姓名'] = name
            break
        else:
            print(error_msg)

    return user_info


def display_user_info(user_info):
    print("\n用户注册信息如下：")
    for key, value in user_info.items():
        print(f"{key}: {value}")


def main():
    print("欢迎使用用户注册小程序！")
    user_info = get_user_input()
    display_user_info(user_info)


if __name__ == "__main__":
    main()
